delete

Доступность

Flash Player 5.

Синтаксис

delete reference

Параметры

reference Имя удаляемой переменной или объекта.

Возвращает

Булево значение.

Описание

Оператор; уничтожает объектную ссылку указанную параметром reference и возвращает true если ссылка успешно удалена; в противном случае false. Этот оператор полезен для освобождения памяти используемой скриптами. Вы можете использовать оператор delete для удаления ссылок на объекты. После того как все ссылки на объекты удалены Flash Player берет на себя заботу об удалении объектов и освобождении используемой ими памяти.

Хотя delete является оператором, он обычно используется как выражение, как показано в следующем примере:

delete x;

Оператор delete может не сработать и возвратить false если параметр reference не существует или не может быть удален. Предопределенные объекты и свойства, а также переменные объявленные с помощью var не могут быть удалены. Вы не можете использовать оператор delete для удаления клипов.

Пример

Случай использования 1: Следующий пример создает объект, использует его, а затем удаляет за ненадобностью:

var account:Object = new Object();
account.name = "Jon";
account.balance = 10000;
trace(account.name);
delete account;
trace(account.name);  //выводит: Jon undefined

Случай использования 2: Следующий пример удаляет свойство объекта:

// создаем новый объект "account"
var account:Object = new Object();
// задаем для объекта account свойство name
account.name = "Jon";
// удаляем свойство
delete account.name;

Случай использования 3: Следующий пример удаляет свойство объекта:

var my_array:Array = new Array();
my_array[0] = "abc"; // my_array.length == 1
my_array[1] = "def"; // my_array.length == 2
my_array[2] = "ghi"; // my_array.length == 3
// удаляется my_array[2], но Array.length не изменяется
delete my_array[2];
trace(my_array.length); // выводит 3
trace(my_array); // выводит abc,def,undefined

Случай использования 4: Следующий пример показывает поведение delete на объектных ссылках:

var ref1:Object = new Object();
ref1.name = "Jody";
// копируем переменную ссылочного типа в новую переменную
// и удаляем ref1
ref2 = ref1;
delete ref1;
trace("ref1.name "+ref1.name); //выводит undefined
trace("ref2.name "+ref2.name); //выводит Jody

Если бы ref1 не была скопирована в ref2, то объект был бы удален при удалении ref1, потому что на него не осталось бы ссылок. Когда же мы удалим и ref2, то больше не останется ссылок на объект; он будет удален и освободится используемая им память.

См. также

var